package com.hundsun.cprs.yyt.service.system.dao;

import com.hundsun.cprs.yyt.service.system.domain.TradeDay;
import com.hundsun.cprs.yyt.service.system.domain.query.TradeDayQuery;

import java.util.Date;
import java.util.List;

public interface TradeDayDao {
    int deleteByPrimaryKey(Long id);

    TradeDay selectByPrimaryKey(Long id);

    int updateByPrimaryKeySelective(TradeDay record);

    int updateTradeStatus(TradeDay record);

    /**
     * 插入一个月的交易日信息
     *
     * @param tradeDay 新增的一个月的交易日信息
     * @return 新增的主键ID
     */
    public Long addTradeDay(TradeDay tradeDay);

    /**
     * 修改一个月的交易日信息
     *
     * @param tradeDay 修改的一个月的交易日信息
     * @return 修改的记录数
     */
    public int editTradeDay(TradeDay tradeDay);

    /**
     * 根据条件查询交易日信息
     *
     * @param tradeDay 查询条件
     * @return 符合条件的交易日信息
     */
    public List<TradeDay> getTradeDay(TradeDay tradeDay);

    /**
     * 根据日期查询交易日
     *
     * @param tradeDay 日期
     * @return 交易日
     */
    public TradeDay getTradeDayByDay(TradeDay tradeDay);

    /**
     * 查询当前交易日的下一个交易日
     *
     * @param day  当前日期
     * @return 下一个交易日
     */
    public TradeDay getNextTradeDay(Date day);

    /**
     * 查询当前交易日的上一个交易日
     *
     * @param day  当前日期
     * @return 上一个交易日
     */
    public TradeDay getPreTradeDay(Date day);

    /**
     * 删除指定年份中，今天之后的所有交易日
     * 用于修改交易日时，先删除，再新增
     *
     * @param tradeDay 指定年份
     * @return 影响的记录数
     */
    public int removeTradeDayByYear(TradeDay tradeDay);

    /**
     * 取指定交易日指定天数之后的交易日
     *
     * @param now
     * @param offset
     * @return
     */
    public TradeDay getTradeDayByOffset(TradeDay now);

    /**
     * 获得前N天的交易日
     * @param num
     * @return
     */
    public List<Date> getLastTradeDayN(int num);

    /**
     * 取指定交易日指定天数之前的交易日
     *
     * @param now
     * @param offset
     * @return
     */
    public List<TradeDay> getTradeDayByOffsetDesc(TradeDay now);

    /**
     * 获取2个日期中间的交易日数量
     * @param startDate
     * @param endDate
     * @return
     */
    public Integer getDiffDays(String startDate, String endDate);

    /**
     * 从生效日期到现在的所以日期
     * @param now
     * @param validTime
     * @return
     */
    public List<Date> getTradeDayByRule(TradeDay now, Date validTime);

    /**
     * 分页查询
     * @param query
     *
     * */
    List<TradeDay> queryByPage(TradeDayQuery query);
}